// src/api/score.js
import request from '@/utils/request'

/**
 * 单条保存（添加或更新）评分信息
 * @param {Object} data - 评分信息对象
 * @param {number} data.awardId - 奖项ID（对应数据库award_id）
 * @param {number} data.expertId - 专家ID（对应数据库expert_id）
 * @param {number|string} data.bgScore - 背景评分（支持数字或字符串格式的小数）
 * @param {number|string} data.innovationScore - 创新评分
 * @param {number|string} data.economicScore - 经济评分
 * @param {number} data.scoreStatus - 评分状态（1表示有效等状态）
 * @param {string} data.scoreRemark - 评分备注
 */
export function saveScore(data) {
    return request({
        url: '/score',
        method: 'post',
        data
    })
}

/**
 * 批量保存（添加或更新）评分信息
 * @param {Array<Object>} scoreList - 评分信息列表
 * @param {number} scoreList[].awardId - 奖项ID
 * @param {number} scoreList[].expertId - 专家ID
 * @param {number|string} scoreList[].bgScore - 背景评分
 * @param {number|string} scoreList[].innovationScore - 创新评分
 * @param {number|string} scoreList[].economicScore - 经济评分
 * @param {number} scoreList[].scoreStatus - 评分状态
 * @param {string} scoreList[].scoreRemark - 评分备注
 */
export function batchSaveScores(scoreList) {
    return request({
        url: '/score/batch',
        method: 'post',
        data: scoreList
    })
}

/**
 * 删除指定奖项的所有评分信息
 * @param {number} awardId - 奖项ID
 * @returns {Promise} - 返回删除结果的Promise
 */
export function deleteScoreByAwardId(awardId) {
    return request({
        url: `/score/${awardId}`,
        method: 'delete'
    })
}

/**
 * 批量删除多个奖项的评分信息
 * @param {Array<number>} awardIds - 奖项ID列表
 * @returns {Promise} - 返回批量删除结果的Promise
 */
export function batchDeleteScores(awardIds) {
    return request({
        url: '/score/batch',
        method: 'delete',
        data: awardIds
    })
}

/**
 * 查询奖项已分配的评审专家
 * @param {string} [specialty] - 专业类型（可选，为空时查询全部专业）
 * @returns {Promise} - 返回包含奖项与专家关联列表的Promise
 */
export function getAwardAllocatedExperts(specialty) {
    return request({
        url: '/score/allocated', // 注意：URL需与后端Controller的@RequestMapping路径一致
                                 // 若后端接口路径不是/award/allocated，需替换为实际路径（如/score/allocated）
        method: 'get', // 后端用@GetMapping，前端对应method为get
        params: {specialty} // get请求用params传参（对应后端@RequestParam）
    })
}

/**
 * 查询项目信息列表
 * @param {Object} params - 查询参数
 * @param {number} params.expertId - 专家ID（必填）
 * @param {string} [params.specialty] - 专业组（可选）
 * @returns {Promise} - 返回包含项目信息列表的Promise
 */
export function getProjectScoreList(params) {
    return request({
        url: '/score/project-list',
        method: 'get',
        params: params  // get请求通过params传递参数，对应后端@RequestParam
    })
}

/**
 * 获取奖项的专家评分信息
 * @param {Object} [params] - 查询参数（均为可选）
 * @param {string} [params.specialty] - 专业类型（为空时查询全部）
 * @param {string} [params.level] - 申报级别（为空时查询全部）
 * @returns {Promise} - 返回奖项专家评分信息列表的Promise
 */
export function getAwardReviewSimple(params) {
    return request({
        url: '/score/detail',
        method: 'get',
        params: params // get请求通过params传递可选参数
    })
}

/**
 * 导出奖项的专家评分信息（Excel文件）
 * @param {Object} [params] - 查询参数（均为可选）
 * @param {string} [params.specialty] - 专业类型（为空时查询全部）
 * @param {string} [params.level] - 申报级别（为空时查询全部）
 * @returns {Promise} - 返回Excel文件流的Promise（需前端处理文件下载）
 */
export function exportReviewExcel(params) {
    return request({
        url: '/score/export-review-excel',
        method: 'get',
        params: params, // get请求通过params传递可选筛选参数
        responseType: 'blob', // 关键：指定响应类型为blob，用于处理文件流
        transformResponse: [(data) => data]  // ✅避免 axios 自动解析
        // headers: {
        //     'Accept': 'application/vnd.ms-excel' // 明确接收Excel格式
        // }
    })
}

/*
// 调用单条保存API

// 准备单条评分数据
const singleScore = {
  awardId: 1001,               // 奖项ID
  expertId: 2002,              // 专家ID
  bgScore: 8.5,                // 背景评分（可传数字）
  innovationScore: "9.2",      // 创新评分（也可传字符串格式的小数）
  economicScore: 7.8,          // 经济评分
  scoreStatus: 1,              // 1表示有效状态
  scoreRemark: "项目创新性强，具有较好的应用前景"  // 评分备注
}

// 调用单条保存API
saveScore(singleScore)
  .then(response => {
    console.log('保存成功', response)
    // 可以在这里添加保存成功后的操作，如提示用户、刷新列表等
    this.$message.success('评分保存成功')
  })
  .catch(error => {
    console.error('保存失败', error)
    this.$message.error('评分保存失败，请重试')
  })

  // 批量保存示例

  // 准备多条评分数据组成的数组
const scoreList = [
  {
    awardId: 1001,
    expertId: 2002,
    bgScore: 8.5,
    innovationScore: 9.2,
    economicScore: 7.8,
    scoreStatus: 1,
    scoreRemark: "项目表现优秀"
  },
  {
    awardId: 1002,
    expertId: 2002,
    bgScore: 7.6,
    innovationScore: 8.3,
    economicScore: 9.0,
    scoreStatus: 1,
    scoreRemark: "项目经济价值较高"
  },
  {
    awardId: 1001,
    expertId: 2003,
    bgScore: 9.0,
    innovationScore: 8.8,
    economicScore: 7.5,
    scoreStatus: 1,
    scoreRemark: "项目背景研究扎实"
  }
]

// 调用批量保存API
batchSaveScores(scoreList)
  .then(response => {
    console.log('批量保存成功', response)
    this.$message.success('批量评分保存成功')
  })
  .catch(error => {
    console.error('批量保存失败', error)
    this.$message.error('批量评分保存失败，请重试')
  })

  // 调用示例

// 1. 仅通过专家ID查询
const expertParams = {
  expertId: 1001  // 专家ID（必填）
}

getProjectScoreList(expertParams)
  .then(response => {
    console.log('项目列表查询成功', response.data)
    // 处理返回的项目列表数据
  })
  .catch(error => {
    console.error('项目列表查询失败', error)
  })


// 2. 同时通过专家ID和专业组查询
const filterParams = {
  expertId: 1001,
  specialty: '油气勘探'  // 专业组（可选）
}

getProjectScoreList(filterParams)
  .then(response => {
    console.log('筛选后的项目列表', response.data)
    // 处理返回的项目列表数据
  })
  .catch(error => {
    console.error('项目列表查询失败', error)
  })
 */